#include <iostream>
/*1. 饿汉模式*/

// class singleton
// {
// private:
//     singleton() : _data(99) {}
//     ~singleton() {}
//     singleton(const singleton &) = delete;
//     singleton operator=(const singleton &) = delete;

// public:
//     static singleton &GetInstance()
//     {
//         return _eton;
//     }

// public:
//     static singleton _eton;
//     int _data;
// };

// singleton singleton::_eton;

/*2. 懒汉模式*/
class singleton
{
private:
    singleton() : _data(99)
    {
        std::cout << "单例对象构造" << std::endl;
    }
    ~singleton() {}
    singleton(const singleton &) = delete;
    singleton operator=(const singleton &) = delete;

public:
    static singleton &GetInstance()
    {
        static singleton eton; // C++11后，静态局部变量是线程安全的
        return eton;
    }

public:
    int _data;
};

int main()
{
    std::cout << singleton::GetInstance()._data << std::endl;
    return 0;
}